Software systems are becoming increasingly complex and therefore increasingly cumbersome to understand and maintain. Typically, a software system, such as a large business software system, has millions of lines of source code. Such software systems may have little or no documentation. As a result, adding new features or fixing bugs in such software systems can be very difficult and time consuming.
If the software system is small, the functional architecture may be comprehended by manually browsing the source code. For large software systems, however, people often rely on program analysis techniques. The program analysis techniques may include a call graph method or a control, data flow, and slicing method. Though such program analysis techniques can be helpful in understanding the structural intricacies of the system, they provide little help with understanding the functional intent of the system.
Therefore, there exists ample opportunity for improvement in technologies related to identifying topics in source code.